home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / disk / cdrom / MusicBox-2.1os.lha / MusicBox / MusicBoxControl.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-29  |  9.0 KB  |  283 lines

  1. /*
  2.  ##########################################################################
  3.  ####                                                                  ####
  4.  ####                        The MusicBox Project                      ####
  5.  ####                    ============================                  ####
  6.  ####                                                                  ####
  7.  #### MusicBoxControl.c                                                ####
  8.  ####                                                                  ####
  9.  #### Version 2.1os  --  September 29, 2000                            ####
  10.  ####                                                                  ####
  11.  #### Copyright (C) 1994  Thomas Dreibholz                             ####
  12.  ####               2000  Molbachweg 7                                 ####
  13.  ####                     51674 Wiehl                                  ####
  14.  ####                     Germany                                      ####
  15.  ####                                                                  ####
  16.  ####                     EMail: Dreibholz@bigfoot.com                 ####
  17.  ####                     WWW:   http://www.bigfoot.com/~dreibholz     ####
  18.  ####                                                                  ####
  19.  ##########################################################################
  20. */
  21. /***************************************************************************
  22.  *                                                                         *
  23.  *   This program is free software; you can redistribute it and/or modify  *
  24.  *   it under the terms of the GNU General Public License as published by  *
  25.  *   the Free Software Foundation; either version 2 of the License, or     *
  26.  *   (at your option) any later version.                                   *
  27.  *                                                                         *
  28.  ***************************************************************************/
  29.  
  30. /* MusicBox Control Port */
  31.  
  32. #include "MusicBox.h"
  33. #include "MusicBoxLibrary.h"
  34.  
  35. extern struct Einstellungen  Einstellungen;
  36. extern struct MsgPort       *ControlPort;
  37. extern struct ThisCD        *ThisCD;
  38. extern struct Katalog       *Katalog;
  39. extern struct Window        *CDPlayerWnd;
  40. extern struct Gadget        *CDPlayerGadgets[27];
  41.  
  42. extern BOOL IsIconify;
  43.  
  44. int ControlHandler()
  45. {
  46.  REGISTER ULONG          adr;
  47.  int                     i,j,k,iconify;
  48.  struct TagItem          tag[2];
  49.  struct MusicBoxCommand *mbc;
  50.  
  51.  iconify=0;
  52.  mbc=GetMsg(ControlPort);
  53.  if(mbc==NULL) return;
  54.  do
  55.   {
  56.    mbc->Status=MBCS_OK;
  57.    switch(mbc->Command)
  58.     {
  59.      case MBC_ICONIFY:
  60.        iconify=1;
  61.       break;
  62.      case MBC_UNICONIFY:
  63.        iconify=2;
  64.       break;
  65.      case MBC_GETPOSITION:
  66.        if(Einstellungen.CDEingelegt)
  67.         {
  68.          if(Einstellungen.CDTyp==AUDIO)
  69.           {
  70.            mbc->MusicBoxInfo.Address=Einstellungen.Adresse;
  71.            mbc->MusicBoxInfo.Function=Einstellungen.Funktion;
  72.            mbc->MusicBoxInfo.Track=Einstellungen.Track;
  73.            mbc->MusicBoxInfo.IsInserted=Einstellungen.CDEingelegt;
  74.            mbc->MusicBoxInfo.IsAudioCD=Einstellungen.CDTyp;
  75.            adr=Einstellungen.Adresse-ThisCD->Track[Einstellungen.Track-1].SAdresse;
  76.            mbc->MusicBoxInfo.Minute=adr/75/60;
  77.            mbc->MusicBoxInfo.Second=(adr/75) % 60;
  78.            mbc->MusicBoxInfo.Frame=adr % 75;
  79.           }
  80.          else
  81.            mbc->Status=MBCS_CDTYPE;
  82.         }
  83.        else
  84.          mbc->Status=MBCS_EJECTED;
  85.       break;
  86.      case MBC_GETINFO:
  87.        if(Einstellungen.CDEingelegt)
  88.         {
  89.          if(Einstellungen.CDTyp==AUDIO)
  90.           {
  91.            mbc->MusicBoxInfo.Address=Einstellungen.Adresse;
  92.            mbc->MusicBoxInfo.Function=Einstellungen.Funktion;
  93.            mbc->MusicBoxInfo.Track=Einstellungen.Track;
  94.            mbc->MusicBoxInfo.IsInserted=Einstellungen.CDEingelegt;
  95.            mbc->MusicBoxInfo.IsAudioCD=Einstellungen.CDTyp;
  96.            adr=Einstellungen.Adresse-ThisCD->Track[Einstellungen.Track-1].SAdresse;
  97.            mbc->MusicBoxInfo.Minute=adr/75/60;
  98.            mbc->MusicBoxInfo.Second=(adr/75) % 60;
  99.            mbc->MusicBoxInfo.Frame=adr % 75;
  100.            mbc->MusicBoxInfo.TrackCount=ThisCD->Anzahl;
  101.            mbc->MusicBoxInfo.DiscID=ThisCD->ID;
  102.            strcpy(&mbc->MusicBoxInfo.CDTitle,&Katalog->CDName);
  103.            for(i=0;i<Katalog->Anzahl;i++)
  104.             {
  105.              strcpy(&mbc->MusicBoxInfo.TrackInfo[i].Title,&Katalog->KE[i].Titel);
  106.              mbc->MusicBoxInfo.TrackInfo[i].SAddress=ThisCD->Track[i].SAdresse;
  107.              mbc->MusicBoxInfo.TrackInfo[i].TAddress=ThisCD->Track[i].TAdresse;
  108.             }
  109.           }
  110.          else
  111.            mbc->Status=MBCS_CDTYPE;
  112.         }
  113.        else
  114.          mbc->Status=MBCS_EJECTED;
  115.       break;
  116.      case MBC_CHANNELS:
  117.        if(mbc->Args[0]==-1L) mbc->Args[0]=MBCC_NOCHANGE;
  118.        if(mbc->Args[1]==-1L) mbc->Args[1]=MBCC_NOCHANGE;
  119.        switch(mbc->Args[0])
  120.         {
  121.          case MBCC_LEFT:
  122.            i=0;
  123.            j=AUDIO_LINKS;
  124.           break;
  125.          case MBCC_RIGHT:
  126.            i=1;
  127.            j=AUDIO_RECHTS;
  128.           break;
  129.          case MBCC_LR:
  130.            i=2;
  131.            j=AUDIO_BEIDE;
  132.           break;
  133.          case MBCC_NONE:
  134.            i=3;
  135.            j=AUDIO_AUS;
  136.           break;
  137.          default:
  138.            i=100;
  139.           break;
  140.         }
  141.        if(i!=100) Einstellungen.AudioL=j;
  142.        switch(mbc->Args[1])
  143.         {
  144.          case MBCC_LEFT:
  145.            k=1;
  146.            j=AUDIO_LINKS;
  147.           break;
  148.          case MBCC_RIGHT:
  149.            k=0;
  150.            j=AUDIO_RECHTS;
  151.           break;
  152.          case MBCC_LR:
  153.            k=2;
  154.            j=AUDIO_BEIDE;
  155.           break;
  156.          case MBCC_NONE:
  157.            k=3;
  158.            j=AUDIO_AUS;
  159.           break;
  160.          default:
  161.            k=100;
  162.           break;
  163.         }
  164.        if(k!=100) Einstellungen.AudioR=j;
  165.        SetzeLR();
  166.        if(IsIconify==FALSE)
  167.         {
  168.          if(i!=100)
  169.           {
  170.            tag[0].ti_Tag=GTCY_Active;
  171.            tag[0].ti_Data=i;
  172.            tag[1].ti_Tag=TAG_DONE;
  173.            GTSetGadgetAttrsA(CDPlayerGadgets[21],CDPlayerWnd,NULL,&tag);
  174.           }
  175.          if(k!=100)
  176.           {
  177.            tag[0].ti_Tag=GTCY_Active;
  178.            tag[0].ti_Data=k;
  179.            tag[1].ti_Tag=TAG_DONE;
  180.            GTSetGadgetAttrsA(CDPlayerGadgets[23],CDPlayerWnd,NULL,&tag);
  181.           }
  182.          ZeigeLR();
  183.         }
  184.       break;
  185.      case MBC_VOLUME:
  186.        if(mbc->Args[0]==-1L) mbc->Args[0]=Einstellungen.VolumenL;
  187.        if(mbc->Args[1]==-1L) mbc->Args[1]=Einstellungen.VolumenR;
  188.        Einstellungen.VolumenL=(UBYTE)mbc->Args[0];
  189.        Einstellungen.VolumenR=(UBYTE)mbc->Args[1];
  190.        Volumen();
  191.        ZeigeVolumen();
  192.        if(IsIconify==FALSE)
  193.         {
  194.          tag[0].ti_Tag=GTSL_Level;
  195.          tag[0].ti_Data=Einstellungen.VolumenR;
  196.          tag[1].ti_Tag=TAG_DONE;
  197.          GTSetGadgetAttrsA(CDPlayerGadgets[25],CDPlayerWnd,NULL,&tag);
  198.          tag[0].ti_Tag=GTSL_Level;
  199.          tag[0].ti_Data=Einstellungen.VolumenL;
  200.          tag[1].ti_Tag=TAG_DONE;
  201.          GTSetGadgetAttrsA(CDPlayerGadgets[23],CDPlayerWnd,NULL,&tag);
  202.         }
  203.        mbc->Args[0]=Einstellungen.VolumenL;
  204.        mbc->Args[1]=Einstellungen.VolumenR;
  205.       break;
  206.      case MBC_VERSION:
  207.        mbc->Args[0]=VERSION;
  208.       break;
  209.      case MBC_PLAY:
  210.        if(Einstellungen.CDEingelegt)
  211.         {
  212.          if(Einstellungen.CDTyp==AUDIO)
  213.           {
  214.            Einstellungen.Funktion=STOP;
  215.            Symbol(WIEDERGABE);
  216.            Einstellungen.Track=mbc->Args[0];
  217.            if(Einstellungen.Track<1) Einstellungen.Track=1;
  218.            if(Einstellungen.Track>ThisCD->Anzahl) Einstellungen.Track=ThisCD->Anzahl;
  219.            WiedergabeClicked();
  220.           }
  221.          else
  222.            mbc->Status=MBCS_CDTYPE;
  223.         }
  224.        else
  225.          mbc->Status=MBCS_EJECTED;
  226.       break;
  227.      case MBC_STOP:
  228.        StopClicked();
  229.       break;
  230.      case MBC_PAUSE:
  231.        if(Einstellungen.Funktion==WIEDERGABE)
  232.          WiedergabeClicked();
  233.        else
  234.          mbc->Status=MBCS_NOT_PLAYING;
  235.       break;
  236.      case MBC_CONTINUE:
  237.        if(Einstellungen.Funktion==PAUSE)
  238.          WiedergabeClicked();
  239.        else
  240.          mbc->Status=MBCS_NOT_PAUSED;
  241.       break;
  242.      case MBC_PLAYADR:
  243.        if(Einstellungen.CDEingelegt)
  244.         {
  245.          if(Einstellungen.CDTyp==AUDIO)
  246.           {
  247.            Symbol(POSITION);
  248.            Einstellungen.Adresse=mbc->Args[0];
  249.            Einstellungen.Funktion=PAUSE;
  250.            Wiedergabe();
  251.            Einstellungen.Funktion=WIEDERGABE;
  252.            ZeigeTrackDisplay();
  253.           }
  254.          else
  255.            mbc->Status=MBCS_CDTYPE;
  256.         }
  257.        else
  258.          mbc->Status=MBCS_EJECTED;
  259.       break;
  260.      case MBC_EJECT:
  261.        if(Einstellungen.Lock==0)
  262.          AuswurfClicked();
  263.        else
  264.          mbc->Status=MBCS_EJECTLOCK;
  265.       break;
  266.      case MBC_LOCK:
  267.        if(mbc->Args[0]==1)
  268.          Einstellungen.Lock=1;
  269.        else
  270.          Einstellungen.Lock=0;
  271.        AuswurfLock();
  272.        ZeigeCDInfo();
  273.       break;
  274.      default:
  275.        mbc->Status=MBCS_UNKNOWN_CMD;
  276.     }
  277.    ReplyMsg(mbc);
  278.    mbc=GetMsg(ControlPort);
  279.   } while(mbc!=NULL);
  280.  return(iconify);
  281. }
  282.  
  283.